package jhh.service;

import java.util.List;

import jhh.entity.ValidataInfo;

import org.dom4j.Document;
import org.dom4j.Element;

import utils.Dom4jUtils;



public class MyValidataXML {
	ValidataInfo info=new ValidataInfo();
   public ValidataInfo VaildataXML(String XmlPath,String XsdPath){
	   Document Xml=Dom4jUtils.getDocument(XmlPath);
	   Document Xsd=Dom4jUtils.getDocument(XsdPath);
	   Element xsd=Xsd.getRootElement();
	   Element xml=Xml.getRootElement();
	   //校验根节点
	   if(!(xml.getName().equals(xsd.attributeValue("name")))){
		   info.setResult(false);
			String str=info.getInfo();
			str+="校验失败   失败原因：校验文件中的根节点与目标文件中的根节点不匹配 ";
			info.setInfo(str);
		//	 System.out.println(info.getInfo());
		
	   }else{
		   //校验其他节点
	
	      Validata(xsd, Xml, Xsd);
	      
			//System.out.println("校验结果"+info.isResult());
			//System.out.println(info.getInfo());
		
       
	   }   
	   if(info.getInfo().equals("")){
		   info.setInfo("success");
	   }
	   return info;
   }
    public  void Validata(Element b,Document xml,Document xsd){
    		List<Element> list=b.elements();
    		for (Element element : list) {
				String name=element.attributeValue("name");
				//System.out.println(name);
				int min=Integer.parseInt(element.attributeValue("min"));
				//System.out.println(min);
				String str="//"+name;
				
				List<Element> list1=xml.selectNodes(str);
				//System.out.println(list1.size());
				if(min>list1.size()){
					info.setResult(false);
					String s=info.getInfo();
					
					s+="校验失败   失败原因：校验文件中 "+name+"节点不符合预期";
					info.setInfo(s);
				//	 System.out.println(info.getInfo());
				}
				else{
					int m=0;
					for (Element element2 : list1) {
					String parentname1=element2.getParent().getName();
					String parentname2=element.getParent().attributeValue("name");
					//System.out.println(parentname1.equals(parentname2));
					if(parentname1.equals(parentname2)){
						m++;
					//	System.out.println(m);
					}
					
					
					}
					if(m>=min){
						m=0;
						for(int i=0;i<list.size();i++){
						 	Element ele=(Element) b.elements().get(i);
						 	if(ele.elements().size()!=0){
						 		Validata(ele, xml, xsd);
						 	}
						}
						
							
						
					}else{
						info.setResult(false);
						String s=info.getInfo();
						s+="校验失败   失败原因：校验文件中 "+name+"节点不符合预期";
						info.setInfo(s);
					//	 System.out.println(info.getInfo());
					}
					
				}
			}
    			
    	    
    
             
         }
   }
